layui.define(['form','table'], function (exports) {
    
    
    
    var event = function(table,config){
        console.log( table );
        console.log( config );
        //条件筛选
        layui.form.on('submit(whereSearchBtn)',function(data){ 
            table.reload(data.field);
            return false;
        });
        
        //更新状态
        layui.form.on('switch(status)', function (data) {
            if( config.urledit == '' )  return false;
            var id = $(data.elem).data("id");
            var ischecked = data.elem.checked;        
            $.post(config.urledit,{id:id},function(ret,status){
                if(ret.code!=1){
                    layer.msg(ret.msg);
                    if(ischecked){
                        $(data.elem).prop("checked",false);
                        $(data.othis).removeClass("layui-form-onswitch").find("em").text("关闭");
                    }else{
                        $(data.elem).prop("checked",true);
                        $(data.othis).addClass("layui-form-onswitch").find("em").text("正常");
                    }
                }
            },'json');
            return false;
        });
        //监听工具条
        layui.table.on('tool('+config.filter+')', function(obj){ 
            //var data = obj.data; //获得当前行数据
            //var layEvent = obj.event; //获得 lay-event 对应的值（也可以是表头的 event 参数对应的值）
            //var tr = obj.tr; //获得当前行 tr 的DOM对象
            if( obj.event == 'del' ){
                var id  =  $(this).data('id');
                layer.confirm('您确定要删除该数据吗？', {
                    btn: ['确定','取消'] //按钮
                }, function(){
                    $.post(config.urldel,{id:id},function(ret,status){                        
                        if(ret.code==1){
                            layui.layer.msg('删除成功');
                            obj.del();
                        }else{
                            layui.layer.msg(ret.msg);
                        }
                    },'json');
                });
            }
          
        });
        
    }
    
    var tool = {
        img:function(img){
            return '<img  src="'+img+'"/>';
        },
        status : function(status,id){
            var css =  status == 1 ? 'checked':'';
            return '<input lay-filter="status" type="checkbox" '+css+' data-id="'+id+'" lay-skin="switch" lay-text="正常|关闭">';
        },
        // 时间戳转日期格式
        date : function(fmt, unixTime, timeZone) {
            if (typeof (timeZone) == 'number') {
                unixTime = parseInt(unixTime) + parseInt(timeZone) * 60 * 60;
            }
            var time = new Date(unixTime * 1000);
            var o = {
                "m+": time.getMonth() + 1, //月份
                "d+": time.getDate(), //日
                "h+": time.getHours() % 12 == 0 ? 12 : time.getHours() % 12, //小时
                "H+": time.getHours(), //小时
                "i+": time.getMinutes(), //分
                "s+": time.getSeconds(), //秒
                "q+": Math.floor((time.getMonth() + 3) / 3), //季度
                "S": time.getMilliseconds() //毫秒
            };
            var week = {
                "0": "/u65e5",
                "1": "/u4e00",
                "2": "/u4e8c",
                "3": "/u4e09",
                "4": "/u56db",
                "5": "/u4e94",
                "6": "/u516d"
            };
            if (/(y+)/.test(fmt)) {
                fmt = fmt.replace(RegExp.$1, (time.getFullYear() + "").substr(4 - RegExp.$1.length));
            }
            if (/(E+)/.test(fmt)) {
                fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "/u661f/u671f" : "/u5468") : "") + week[time.getDay() + ""]);
            }
            for (var k in o) {
                if (new RegExp("(" + k + ")").test(fmt)) {
                    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
                }
            }
            return fmt;
        }
    }
    
    var thisTable = function(options){
        var that = this;
        this.tool = tool;
        that.lock = false;
        this.config = {
            search : '',  // 传入条件刷选的确定按钮 自动获取刷选条件
            urledit : '', // 更新状态
            urldel : '',  // 删除数据
            url : '', // 列表读取
            elem : '#tableList',
            filter: 'tableList', // 监听工具栏事件
            page : 1,
            limit: 15,
            where : {},
        }        
        $.extend(this.config,options);
        event(that,this.config); // 添加表格的默认事件
        var load = function(){
            that.table = layui.table.render({
                elem: that.config.elem,
               // id: 'testReload',
               // where: {token: ''}
                method : 'post',
                height: 'auto',
                where : that.config.where,
                url: that.config.url,// '/set/cases/index', //数据接口
                limit : that.config.limit,
                page: { //支持传入 laypage 组件的所有参数（某些参数除外，如：jump/elem） - 详见文档
                  layout: [ 'count', 'prev', 'page', 'next', 'skip'], //自定义分页布局
                  curr: that.config.page, //设定初始在第 5 页
                  theme: '#1E9FFF', 
                  groups: 5, //只显示 1 个连续页码
                  first: '首页', //不显示首页
                  //last: false, //不显示尾页      
                }, //开启分页
                cols: that.config.cols,
                parseData: function(res){ //res 即为原始返回的数据
                    return {
                        "code" : res.code, //解析接口状态
                        "msg"  : res.msg, //解析提示文本
                        "count": res.data.total, //解析数据长度
                        "data" : res.data.list //解析数据列表
                    };
                },
                response: {
                    statusCode: 1, //规定成功的状态码，默认：0
                },
                done: function(res, curr, count){
                    if( that.lock && res.code == 1){
                        that.lock = false;
                        that.config.page = curr;
                        //console.log('重新实例化');
                        load();
                    }
                    if( res.code != 1 ){
                        that.lock = true;
                    }
                }
            });
        }        
        this.reload = function(where){
            that.config.where = where;
            that.config.page = 1;
            load();
        }
        that.config.search == '' ? load() : $(that.config.search).click();
    }
    
    var listTable = {
        render: function (e){
            return new thisTable(e);
        }
    };
    exports('listTable', listTable);
});